home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 January: Mac OS SDK / Dev.CD Jan 99 SDK2.toast / Development Kits / QuickTime / QuickTime 3 Interfaces & Libs / QTDevMac / CIncludes / QD3DPick.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-08-21  |  8.1 KB  |  306 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        QD3DPick.h
  3.  
  4.      Contains:    Q3Pick methods                                    
  5.  
  6.      Version:    Technology:    Quickdraw 3D 1.5.4
  7.                  Release:    QuickTime 3.0
  8.  
  9.      Copyright:    © 1995-1998 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. */
  18. #ifndef __QD3DPICK__
  19. #define __QD3DPICK__
  20.  
  21. #ifndef __QD3D__
  22. #include <QD3D.h>
  23. #endif
  24.  
  25. #ifndef __QD3DSTYLE__
  26. #include <QD3DStyle.h>
  27. #endif
  28. #ifndef __QD3DGEOMETRY__
  29. #include <QD3DGeometry.h>
  30. #endif
  31.  
  32.  
  33.  
  34. #if PRAGMA_ONCE
  35. #pragma once
  36. #endif
  37.  
  38. #ifdef __cplusplus
  39. extern "C" {
  40. #endif
  41.  
  42. #if PRAGMA_IMPORT
  43. #pragma import on
  44. #endif
  45.  
  46. #if PRAGMA_STRUCT_ALIGN
  47.     #pragma options align=power
  48. #elif PRAGMA_STRUCT_PACKPUSH
  49.     #pragma pack(push, 2)
  50. #elif PRAGMA_STRUCT_PACK
  51.     #pragma pack(2)
  52. #endif
  53.  
  54. #if PRAGMA_ENUM_ALWAYSINT
  55.     #pragma enumsalwaysint on
  56. #elif PRAGMA_ENUM_OPTIONS
  57.     #pragma option enum=int
  58. #elif PRAGMA_ENUM_PACK
  59.     #if __option(pack_enums)
  60.         #define PRAGMA_ENUM_PACK__QD3DPICK__
  61.     #endif
  62.     #pragma options(!pack_enums)
  63. #endif
  64.  
  65. /*****************************************************************************
  66.  **                                                                            **
  67.  **                            Mask bits for hit information                     **
  68.  **                                                                            **
  69.  *****************************************************************************/
  70.  
  71. enum TQ3PickDetailMasks {
  72.     kQ3PickDetailNone            = 0,
  73.     kQ3PickDetailMaskPickID        = 1 << 0,
  74.     kQ3PickDetailMaskPath        = 1 << 1,
  75.     kQ3PickDetailMaskObject        = 1 << 2,
  76.     kQ3PickDetailMaskLocalToWorldMatrix = 1 << 3,
  77.     kQ3PickDetailMaskXYZ        = 1 << 4,
  78.     kQ3PickDetailMaskDistance    = 1 << 5,
  79.     kQ3PickDetailMaskNormal        = 1 << 6,
  80.     kQ3PickDetailMaskShapePart    = 1 << 7,
  81.     kQ3PickDetailMaskPickPart    = 1 << 8,
  82.     kQ3PickDetailMaskUV            = 1 << 9
  83. };
  84. typedef enum TQ3PickDetailMasks TQ3PickDetailMasks;
  85.  
  86. typedef unsigned long                     TQ3PickDetail;
  87. /******************************************************************************
  88.  **                                                                             **
  89.  **                                Hitlist sorting                                 **
  90.  **                                                                             **
  91.  *****************************************************************************/
  92.  
  93. enum TQ3PickSort {
  94.     kQ3PickSortNone                = 0,
  95.     kQ3PickSortNearToFar        = 1,
  96.     kQ3PickSortFarToNear        = 2
  97. };
  98. typedef enum TQ3PickSort TQ3PickSort;
  99.  
  100.  
  101. /******************************************************************************
  102.  **                                                                             **
  103.  **                    Data structures to set up the pick object                 **
  104.  **                                                                             **
  105.  *****************************************************************************/
  106. #define kQ3ReturnAllHits        0
  107.  
  108. struct TQ3PickData {
  109.     TQ3PickSort                     sort;
  110.     TQ3PickDetail                     mask;
  111.     unsigned long                     numHitsToReturn;
  112. };
  113. typedef struct TQ3PickData                TQ3PickData;
  114.  
  115. struct TQ3WindowPointPickData {
  116.     TQ3PickData                     data;
  117.     TQ3Point2D                         point;
  118.     float                             vertexTolerance;
  119.     float                             edgeTolerance;
  120. };
  121. typedef struct TQ3WindowPointPickData    TQ3WindowPointPickData;
  122.  
  123. struct TQ3WindowRectPickData {
  124.     TQ3PickData                     data;
  125.     TQ3Area                         rect;
  126. };
  127. typedef struct TQ3WindowRectPickData    TQ3WindowRectPickData;
  128. /******************************************************************************
  129.  **                                                                             **
  130.  **                                    Hit data                                 **
  131.  **                                                                             **
  132.  *****************************************************************************/
  133.  
  134. struct TQ3HitPath {
  135.     TQ3GroupObject                     rootGroup;
  136.     unsigned long                     depth;
  137.     TQ3GroupPosition *                positions;
  138. };
  139. typedef struct TQ3HitPath                TQ3HitPath;
  140. /******************************************************************************
  141.  **                                                                             **
  142.  **                                Pick class methods                             **
  143.  **                                                                             **
  144.  *****************************************************************************/
  145. EXTERN_API_C( TQ3ObjectType )
  146. Q3Pick_GetType                    (TQ3PickObject             pick);
  147.  
  148. EXTERN_API_C( TQ3Status )
  149. Q3Pick_GetData                    (TQ3PickObject             pick,
  150.                                  TQ3PickData *            data);
  151.  
  152. EXTERN_API_C( TQ3Status )
  153. Q3Pick_SetData                    (TQ3PickObject             pick,
  154.                                  const TQ3PickData *    data);
  155.  
  156. EXTERN_API_C( TQ3Status )
  157. Q3Pick_GetVertexTolerance        (TQ3PickObject             pick,
  158.                                  float *                vertexTolerance);
  159.  
  160. EXTERN_API_C( TQ3Status )
  161. Q3Pick_GetEdgeTolerance            (TQ3PickObject             pick,
  162.                                  float *                edgeTolerance);
  163.  
  164. EXTERN_API_C( TQ3Status )
  165. Q3Pick_SetVertexTolerance        (TQ3PickObject             pick,
  166.                                  float                     vertexTolerance);
  167.  
  168. EXTERN_API_C( TQ3Status )
  169. Q3Pick_SetEdgeTolerance            (TQ3PickObject             pick,
  170.                                  float                     edgeTolerance);
  171.  
  172. EXTERN_API_C( TQ3Status )
  173. Q3Pick_GetNumHits                (TQ3PickObject             pick,
  174.                                  unsigned long *        numHits);
  175.  
  176. EXTERN_API_C( TQ3Status )
  177. Q3Pick_EmptyHitList                (TQ3PickObject             pick);
  178.  
  179. EXTERN_API_C( TQ3Status )
  180. Q3Pick_GetPickDetailValidMask    (TQ3PickObject             pick,
  181.                                  unsigned long             index,
  182.                                  TQ3PickDetail *        pickDetailValidMask);
  183.  
  184. EXTERN_API_C( TQ3Status )
  185. Q3Pick_GetPickDetailData        (TQ3PickObject             pick,
  186.                                  unsigned long             index,
  187.                                  TQ3PickDetail             pickDetailValue,
  188.                                  void *                    detailData);
  189.  
  190. EXTERN_API_C( TQ3Status )
  191. Q3HitPath_EmptyData                (TQ3HitPath *            hitPath);
  192.  
  193. /******************************************************************************
  194.  **                                                                             **
  195.  **                            Window point pick methods                         **
  196.  **                                                                             **
  197.  *****************************************************************************/
  198. EXTERN_API_C( TQ3PickObject )
  199. Q3WindowPointPick_New            (const TQ3WindowPointPickData * data);
  200.  
  201. EXTERN_API_C( TQ3Status )
  202. Q3WindowPointPick_GetPoint        (TQ3PickObject             pick,
  203.                                  TQ3Point2D *            point);
  204.  
  205. EXTERN_API_C( TQ3Status )
  206. Q3WindowPointPick_SetPoint        (TQ3PickObject             pick,
  207.                                  const TQ3Point2D *        point);
  208.  
  209. EXTERN_API_C( TQ3Status )
  210. Q3WindowPointPick_GetData        (TQ3PickObject             pick,
  211.                                  TQ3WindowPointPickData * data);
  212.  
  213. EXTERN_API_C( TQ3Status )
  214. Q3WindowPointPick_SetData        (TQ3PickObject             pick,
  215.                                  const TQ3WindowPointPickData * data);
  216.  
  217.  
  218. /******************************************************************************
  219.  **                                                                             **
  220.  **                            Window rect pick methods                         **
  221.  **                                                                             **
  222.  *****************************************************************************/
  223. EXTERN_API_C( TQ3PickObject )
  224. Q3WindowRectPick_New            (const TQ3WindowRectPickData * data);
  225.  
  226. EXTERN_API_C( TQ3Status )
  227. Q3WindowRectPick_GetRect        (TQ3PickObject             pick,
  228.                                  TQ3Area *                rect);
  229.  
  230. EXTERN_API_C( TQ3Status )
  231. Q3WindowRectPick_SetRect        (TQ3PickObject             pick,
  232.                                  const TQ3Area *        rect);
  233.  
  234. EXTERN_API_C( TQ3Status )
  235. Q3WindowRectPick_GetData        (TQ3PickObject             pick,
  236.                                  TQ3WindowRectPickData * data);
  237.  
  238. EXTERN_API_C( TQ3Status )
  239. Q3WindowRectPick_SetData        (TQ3PickObject             pick,
  240.                                  const TQ3WindowRectPickData * data);
  241.  
  242.  
  243.  
  244. /******************************************************************************
  245.  **                                                                             **
  246.  **                                Shape Part methods                             **
  247.  **                                                                             **
  248.  *****************************************************************************/
  249. EXTERN_API_C( TQ3ObjectType )
  250. Q3ShapePart_GetType                (TQ3ShapePartObject     shapePartObject);
  251.  
  252. EXTERN_API_C( TQ3ObjectType )
  253. Q3MeshPart_GetType                (TQ3MeshPartObject         meshPartObject);
  254.  
  255. EXTERN_API_C( TQ3Status )
  256. Q3ShapePart_GetShape            (TQ3ShapePartObject     shapePartObject,
  257.                                  TQ3ShapeObject *        shapeObject);
  258.  
  259. EXTERN_API_C( TQ3Status )
  260. Q3MeshPart_GetComponent            (TQ3MeshPartObject         meshPartObject,
  261.                                  TQ3MeshComponent *        component);
  262.  
  263. EXTERN_API_C( TQ3Status )
  264. Q3MeshFacePart_GetFace            (TQ3MeshFacePartObject     meshFacePartObject,
  265.                                  TQ3MeshFace *            face);
  266.  
  267. EXTERN_API_C( TQ3Status )
  268. Q3MeshEdgePart_GetEdge            (TQ3MeshEdgePartObject     meshEdgePartObject,
  269.                                  TQ3MeshEdge *            edge);
  270.  
  271. EXTERN_API_C( TQ3Status )
  272. Q3MeshVertexPart_GetVertex        (TQ3MeshVertexPartObject  meshVertexPartObject,
  273.                                  TQ3MeshVertex *        vertex);
  274.  
  275.  
  276.  
  277.  
  278. #if PRAGMA_ENUM_ALWAYSINT
  279.     #pragma enumsalwaysint reset
  280. #elif PRAGMA_ENUM_OPTIONS
  281.     #pragma option enum=reset
  282. #elif defined(PRAGMA_ENUM_PACK__QD3DPICK__)
  283.     #pragma options(pack_enums)
  284. #endif
  285.  
  286. #if PRAGMA_STRUCT_ALIGN
  287.     #pragma options align=reset
  288. #elif PRAGMA_STRUCT_PACKPUSH
  289.     #pragma pack(pop)
  290. #elif PRAGMA_STRUCT_PACK
  291.     #pragma pack()
  292. #endif
  293.  
  294. #ifdef PRAGMA_IMPORT_OFF
  295. #pragma import off
  296. #elif PRAGMA_IMPORT
  297. #pragma import reset
  298. #endif
  299.  
  300. #ifdef __cplusplus
  301. }
  302. #endif
  303.  
  304. #endif /* __QD3DPICK__ */
  305.  
  306.